package course;



import java.sql.*;
import java.util.ArrayList;

/**创建连接 localhost:1433;DatabaseName=数据库名
 * sql中的？代表占位符，  预处理执行器特有
 * 填充第几个？
 * 构造函数
 * 循环语句
 * 用户新建
 * 创建连接 localhost:1433;DatabaseName=数据库名
 * sql中的？代表占位符，  预处理执行器特有
 * exuecuteQuery 用于 Select  executeUpdate()用于修改CUD
 * 关闭
 * 返回
 */

/**
 * public class是JAVA定义的
 * 一般占到编程的角度来将就是包含main方法的
 * 一个java文件中。
 * Java是一门面向对象编程语言
 * 不仅吸收了C++语言的各种优点
 * 还摒弃了C++里难以理解的多继承、指针等概念
 * 因此Java语言具有功能强大和简单易用两个特征
 * Java语言作为静态面向对象编程语言的代表
 * 极好地实现了面向对象理论
 * 允许程序员以优雅的思维方式进行复杂的编程。
 * 扩展资料：
 * Java看起来设计得很像C++
 * 但是为了使语言小和容易熟悉
 * 设计者们把C++语言中许多可用的特征去掉了
 * 这些特征是一般程序员很少使用的
 * Java不支持go to语句
 * 代之以提供break和continue语句以及异常处理
 * Java还剔除了C++的操作符过载（overload）和多继承特征
 * 并且不使用主文件
 * 免去了预处理程序。
 * 因为Java没有结构
 * 数组和串都是对象
 * 所以不需要指针
 * ，实现自动的无用单元收集
 * 使用户不必为存储管理问题烦恼
 * 能更多的时间和精力花在研发上
 */
public class LoginDao {
    public ArrayList<UserPojo> findByUname(String p_username) throws SQLException, SQLException {


        //2. 创建连接 localhost:1433;DatabaseName=数据库名
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xie", "sa", "123456");
        //sql中的？代表占位符，  预处理执行器特有
        String sql = "select username, password, id , sex, date\n" +
                "from user_mst   where username = ?  ";
        PreparedStatement ps = conn.prepareStatement(sql);
        //填充第几个？
        ps.setString(1,p_username);
        // 3
        ArrayList<UserPojo> ulist = new ArrayList<>();
        //构造函数
        ResultSet rs = ps.executeQuery();
        //结果
        while (rs.next()) {
            //循环语句
            UserPojo pojo = new UserPojo();
            //用户新建
            ulist.add(pojo);
            //添加
            pojo.setUsername(rs.getString(1));
            //访问字段
            pojo.setPassword(rs.getString(2));
            //访问字段

            
            //   pojo.setSex(rs.getString(4));
            //   pojo.setDate(rs.getString(5));

        }
        conn.close();
        //关闭
        return ulist;
        //返回
    }

    /**
     * 这个应该是你类中的set和get方法
     * 说的白话一些，set方法是往对象里赋值
     * 而get方法是从对象中取值
     * 也就是说使用set方法我只需要知道需要参数的类型是什么就可以了
     * 而get方法中我需要从对象中取到这个值
     * 然后通过return反馈给用get方法取值的对象。
     * public class A{
     * int sno;
     * String name;
     * public int getSno(){
     * return sno;
     * }
     * public void setSno(int sno){
     * this.sno=sno;
     * }
     * public String getName(){
     * return name;
     * }
     * public void setName(String name){
     * this.name=name;
     * }
     * }
     * /**测试方法
     * public static void main(String[] args){
     * A a=new A();
     * a.setSno(1);
     * a.setName("job");
     * System.out.println("编号："+a.getSno()+" 姓名："+a.getName());
     * @param v1
     * @param v2
     * @param v3
     * @param v4
     * @return
     * @throws SQLException
     */

    public int addUserInfo(String v1, String v2,int v3,int v4) throws SQLException {

        // 2. 创建连接 localhost:1433;DatabaseName=数据库名
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xie", "sa", "123456");
        // sql中的？代表占位符，  预处理执行器特有
        String sql = "insert into Course(cno,cname,cgrade,ctime) values(?, ?, ?, ?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        // 填充第几个？
        ps.setString(1, v1);
        //填充第一个
        ps.setString(2, v2);
        //填充第二个
        ps.setInt(3, v3);
        //填充第三个
        ps.setInt(4, v4);
        //填充第四个


        // 3
        // exuecuteQuery 用于 Select  executeUpdate()用于修改CUD
        int rs = ps.executeUpdate();

        conn.close();
        //关闭

        return rs;
        //返回
    }


}
